﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using MakeIT.Deo.Negocios;
using System.IO;

namespace MakeIT.Deo.Apresentacao
{
    public partial class CadastroConteudo : System.Web.UI.Page
    {
        String nomeDoConteudo = null;
        usuario usuarioVO = null;
        
        protected void Page_Load(object sender, EventArgs e)
        {
            nomeDoConteudo = this.Request["conteudo"];
            usuarioVO = (usuario)this.Session["userActive"];
            if (usuarioVO == null)
                Response.Redirect("~/BackOffice.aspx");

            if (!IsPostBack)
            {

                this.LiteralNomePagina.Text = nomeDoConteudo;
                this.LiteralNomePagina2.Text = nomeDoConteudo;
                this.LiteralNomePagina3.Text = nomeDoConteudo;
                this.LabelConteudoEstatico.Text = nomeDoConteudo;

                if (!(nomeDoConteudo == null))
                {
                    // atualizar os dados na tela
                    recuperaConteudo(nomeDoConteudo);

                    this.EditorConteudo.ActiveMode = AjaxControlToolkit.HTMLEditor.ActiveModeType.Preview;
                    this.btnEditar.Enabled = true;
                    this.btnPublicar.Enabled = true;
                    this.FileUpload1.Enabled = true;
                    this.ButtonFileUpload.Enabled = true;
                    this.btnPreview.Enabled = true;

                    this.Image1.ImageUrl = "~/Download.aspx?idConteudoEstatico=" + nomeDoConteudo;
                }
            }
        }
        
        // popula os controle da tela com o conteudo do banco
        protected void recuperaConteudo(String idConteudo)
        {
            conteudoestatico conteudoVO = null;
            ConteudoBO conteudoBO = null;

            try
            {
                //Cria objeto
                conteudoBO = new ConteudoBO();

                //Recupera dados para serem alterados
                conteudoVO = conteudoBO.RecuperaConteudo(idConteudo);
                //Verifica se o conteudo é nulo, se sim = cadastro novo

                if (!(conteudoVO == null))
                {
                    this.EditorConteudo.Content = conteudoVO.conteudoEdicao;
                    this.LiteralPagina.Text = imagemTagReplace(conteudoVO.conteudoProducao, idConteudo);
                    this.ltDataCadastro.Text = ((DateTime)conteudoVO.Cadastro).ToString();
                    this.ltCadastradoPor.Text = conteudoVO.CadastradoPor;
                    this.ltDataEdicao.Text = (conteudoVO.Edicao==null?"":((DateTime)conteudoVO.Edicao).ToString());
                    this.ltEditadoPor.Text = conteudoVO.EditadoPor;
                }
            }
            catch (Exception ex)
            {

                throw ex;
            }

        }

        protected void btnEditar_Click(object sender, EventArgs e)
        {
            this.EditorConteudo.ActiveMode = AjaxControlToolkit.HTMLEditor.ActiveModeType.Design;
            this.btnCancelar.Enabled = true;
            this.btnReverter.Enabled = true;
            this.btnSalvar.Enabled = true;
            this.btnEditar.Enabled = false;
            this.btnPublicar.Enabled = false;
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            recuperaConteudo(this.nomeDoConteudo);
            this.EditorConteudo.ActiveMode = AjaxControlToolkit.HTMLEditor.ActiveModeType.Preview;
            this.btnCancelar.Enabled = false;
            this.btnReverter.Enabled = false;
            this.btnSalvar.Enabled = false;
            this.btnEditar.Enabled = true;
            this.btnPublicar.Enabled = true;
 
        }

        // copia conteudo publicado para o editor
        protected void btnReverter_Click(object sender, EventArgs e)
        {
            this.EditorConteudo.Content = this.LiteralPagina.Text;
        }

        protected void btnSalvar_Click(object sender, EventArgs e)
        {
            //Declara objetos
            conteudoestatico conteudoVO = null;
            ConteudoBO conteudoBO = null;
            bool novoRegistro = false;

            try
            {
            
                //Cria objeto
                conteudoBO = new ConteudoBO();

                //Recupera dados para serem alterados
                conteudoVO = conteudoBO.RecuperaConteudo(nomeDoConteudo);

                //Verifica se o conteudo é nulo, se sim = cadastro novo
                if (conteudoVO==null)
                {
                    conteudoVO = new conteudoestatico();
                    conteudoVO.idConteudoEstatico = nomeDoConteudo;
                    conteudoVO.Cadastro = DateTime.Now;
                    conteudoVO.CadastradoPor = usuarioVO.User;
                    this.ltDataCadastro.Text = conteudoVO.Cadastro.ToString();
                    this.ltCadastradoPor.Text = conteudoVO.CadastradoPor;

                    novoRegistro = true;
                }

                conteudoVO.conteudoEdicao = this.EditorConteudo.Content;
                conteudoVO.conteudoProducao = this.LiteralPagina.Text;
                conteudoVO.Edicao = DateTime.Now;
                conteudoVO.EditadoPor = usuarioVO.User;
                this.ltDataEdicao.Text = conteudoVO.Edicao.ToString();
                this.ltEditadoPor.Text = conteudoVO.EditadoPor;

                //Chama metodo para salvar ou criar novo registro
                conteudoBO.SalvaConteudo(conteudoVO, novoRegistro);

                // Exibe msg de sucesso ao salvar registro
                Util.ExibeAlert(this, "Registro salvo com sucesso!");

                this.EditorConteudo.ActiveMode = AjaxControlToolkit.HTMLEditor.ActiveModeType.Preview;
                this.btnCancelar.Enabled = false;
                this.btnReverter.Enabled = false;
                this.btnSalvar.Enabled = false;
                this.btnEditar.Enabled = true;
                this.btnPublicar.Enabled = true;
            }
            catch (Exception ex)
            {

                throw ex;
            }

        }       

        // libera o conteudo em edição para o site
        protected void btnLiberar_Click(object sender, EventArgs e)
        {
            this.LiteralPagina.Text = this.EditorConteudo.Content;
            this.btnSalvar_Click(sender, e);
        }

        // Preview do conteudo em edição para o site
        protected void btnPreview_Click(object sender, EventArgs e)
        {
            string conteudo = CadastroConteudo.imagemTagReplace(this.EditorConteudo.Content, this.LiteralNomePagina3.Text);
            if (nomeDoConteudo.Equals("Home"))
                conteudo = "<div style=\"border:solid 1px Blue; text-align:left; padding-bottom:5px; width:650px;\" >" +
                              conteudo +
                           "</div>";
            this.LiteralEdicao.Text = conteudo;
        }

        protected void ButtonFileUpload_Click(object sender, EventArgs e)
        {
           // upload da imagem
            if (this.FileUpload1.PostedFile.FileName.Length > 0)
            {
                 //Recupera dados
                ConteudoBO conteudoBO = new ConteudoBO();
                conteudoestatico conteudoVO = conteudoBO.RecuperaConteudo(this.LabelConteudoEstatico.Text);
                if (conteudoVO == null)
                {
                    this.LabelMensagem.Text = "É necessário existir um conteúdo em edição ou publicado para fazer Upload de imagem.";
                    return;
                }

                HttpPostedFile pf;
                Stream st;

                pf = this.FileUpload1.PostedFile;
                st = pf.InputStream;

                byte[] fb = new byte[st.Length];
                st.Read(fb, 0, int.Parse(st.Length.ToString()));


                conteudoVO.foto = fb;
                conteudoVO.Mime = pf.ContentType;
                conteudoVO.Edicao = DateTime.Now;
                conteudoVO.EditadoPor = usuarioVO.User;

                //Chama metodo para salvar ou criar novo registro
                conteudoBO.SalvaConteudo(conteudoVO, false);

                this.LabelMensagem.Text = fb.Length + " bytes enviados";
                this.Image1.ImageUrl = "~/Download.aspx?idConteudoEstatico=" + conteudoVO.idConteudoEstatico;
            }
        }

        public static string imagemTagReplace(string html, string idConteudoEstatico){

            int posIni = 0;
            int posFin = 0;
            string tagImagem = "";
            string[] tags = null;
            while (posIni >= 0)
            {
                posIni = html.IndexOf("[imagem,");
                if (posIni < 0)
                    break;
                posFin = html.IndexOf("]", posIni);
                if (posFin < 0)
                    break;
                
                tagImagem = html.Substring(posIni+1, posFin - posIni - 1);
                tags = tagImagem.Split(',');
                if (tags.Length != 4)
                    break;

                string imgTag = "<img src=\"Download.aspx?idConteudoEstatico=" + idConteudoEstatico + "\" ";

                imgTag += "style=\"margin:10px 10px 10px 10px; ";
                if (tags[1].Trim().Length>0)
                    imgTag += "float:"+(tags[1].Trim().Equals("esq")?"left":"right")+"; ";
                imgTag += "\"";
                try
                {
                    if (tags[2].Trim().Length > 0)
                        imgTag += "width=\"" + int.Parse(tags[2]) + "\" ";
                    if (tags[3].Trim().Length > 0)
                        imgTag += "height=\"" + int.Parse(tags[3]) + "\" ";
                }
                catch (Exception ex)
                {
                    break;
                }
                imgTag += " />";

                html = html.Replace("["+tagImagem+"]", imgTag);

            }
            return html;

        }
    }
}
